package cn.itsource.crm.web.controller;

import cn.itsource.crm.domain.Employee;
import cn.itsource.crm.domain.Role;
import cn.itsource.crm.domain.Role;
import cn.itsource.crm.domain.Tenant;
import cn.itsource.crm.query.RoleQuery;
import cn.itsource.crm.service.IRoleService;
import cn.itsource.shiro.utils.LoginUserUtil;
import cn.itsource.util.AjaxResult;
import cn.itsource.util.PageList;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 只有租户有权限访问
 */
@Controller
@RequestMapping("/role")
@CrossOrigin//解决跨域问题
public class RoleController {

    @Autowired
    private IRoleService roleService;

    /**
     * 根据租户id查询所有角色
     * @return
     */
    @RequestMapping(value = "/list/{tenantId}",method = RequestMethod.GET)//批量查询用PATCH
    @ResponseBody
    @ApiOperation(value = "list查询所有方法",notes = "查询所有角色信息")
    //HTTP响应整体描述
    @ApiResponses({
            //HTTP响应其中1个描述
            @ApiResponse(code = 200,message = "成功"),
            @ApiResponse(code = 500,message = "网络错误，请稍后")
    })
    public List<Role> list(@PathVariable Long tenantId){/*tenantId要跟上面的{tenantId}*/
        List<Role> all = roleService.findAllByTenant(tenantId);
        return all;
    }
    
    /**
     * 分页和高级查询
     *
     * @return
     */
    @RequestMapping(value = "/queryPage", method = RequestMethod.PATCH)//批量查询用PATCH
    @ResponseBody
    @ApiOperation(value = "list查询所有方法", notes = "查询所有角色信息")
    //HTTP响应整体描述
    @ApiResponses({
            //HTTP响应其中1个描述
            @ApiResponse(code = 200, message = "成功"),
            @ApiResponse(code = 500, message = "网络错误，请稍后")
    })
    public PageList<Role> queryPage(@RequestBody RoleQuery roleQuery) {
        /*获取租户id*/
        Employee user = LoginUserUtil.getUser();
        roleQuery.setTenantId(user.getTenant().getId());

        PageList<Role> list = roleService.queryPage(roleQuery);
        return list;
    }

    /**
     * 根据id查询单个角色信息
     *
     * @param id
     * @return
     */
    @RequestMapping(value = "/findOne/{id}", method = RequestMethod.GET)//查询单个用GET
    @ResponseBody
    //描述一个类的一个方法，或者说一个接口
    @ApiOperation(value = "根据id查询角色信息", notes = "getOne查询方法")
    //一个请求参数
    @ApiImplicitParam(name = "id", value = "id参数", required = true, dataType = "Long", paramType = "path")
    public Role findOne(@PathVariable Long id) {
        System.out.println("通过id获取单个对象--  " + id);
        return roleService.findOne(id);
    }

    /**
     * 保存角色信息
     *
     * @param role
     * @return
     */
    @RequestMapping(value = "/save", method = RequestMethod.PUT)//保存用PUT
    @ResponseBody
    @ApiOperation(value = "save保存角色信息的方法", notes = "保存角色信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "role", value = "role对象", dataType = "Role", paramType = "path")
    })
    @ApiResponses({
            @ApiResponse(code = 200, message = "保存成功"),
            @ApiResponse(code = 500, message = "服务器错误")
    })
    public AjaxResult save(@RequestBody Role role) {
        try {
            /*设置租户id*/
            Tenant tenant = LoginUserUtil.getUser().getTenant();
            role.setTenant(tenant);

            roleService.save(role);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false);
        }
    }

    /**
     * 更新角色信息
     *
     * @param role
     * @return
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)//POST用来修改信息
    @ResponseBody
    @ApiResponses({
            @ApiResponse(code = 200, message = "更新成功"),
            @ApiResponse(code = 500, message = "网络错误...")
    })
    @ApiImplicitParams({
            @ApiImplicitParam(name = "role角色信息", value = "角色信息", dataType = "Role", paramType = "path")
    })
    public AjaxResult update(@RequestBody Role role) {
        try {
            /*设置租户id*/
            Tenant tenant = LoginUserUtil.getUser().getTenant();
            role.setTenant(tenant);

            roleService.update(role);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false);
        }
    }


    @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)//DELETE删除角色信息
    @ResponseBody
    @ApiResponses({
            @ApiResponse(code = 200, message = "删除成功"),
            @ApiResponse(code = 500, message = "服务器异常")
    })
    @ApiImplicitParams({
            @ApiImplicitParam(name = "参数id", value = "参数id", dataType = "Long", paramType = "path", required = true)
    })
    @ApiOperation(value = "delete删除方法", notes = "删除角色信息")
    public AjaxResult delete(@PathVariable Long id) {
        try {
            roleService.delete(id);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false);
        }
    }
}
